package com.iwhalecloud.citybrain.flow.platform.manager.domain.repository;

import java.util.List;

import com.github.pagehelper.PageInfo;
import com.iwhalecloud.citybrain.flow.platform.manager.common.ResponseResult;
import com.iwhalecloud.citybrain.flow.platform.manager.common.client.FlowNodeRecordsDTO;
import com.iwhalecloud.citybrain.flow.platform.manager.common.client.HttpFlowRecordsQueryDto;
import com.iwhalecloud.citybrain.flow.platform.manager.common.client.HttpGetTaskDto;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.form.TaskFormDetailVo;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.monitor.*;

/**
 * @author lilh
 * @date 2019-07-29 14:56
 */
public interface FlowMonitorRepository {

    /**
     * 实例操作
     *
     * @param processInstanceActionVo 操作信息
     * @return 操作结果
     */
    ResponseResult doAction(ProcessInstanceActionVo processInstanceActionVo);


    /**
     * 流转记录
     *
     * @param processInstanceId 实例id
     * @return 流转列表
     */
    List<FlowRecordVo> listFlowRecords(String processInstanceId);


    String getOperatorName (String taskId);

    /**
     * 任务表单信息
     *
     * @param taskId 任务id
     * @return 表单详情
     */
    TaskFormDetailVo showForm(String taskId);

    /**
     * 获取外部表单的任务表单详情
     * @param taskId
     * @return
     */


    /**
     * 获取通知日志
     *
     * @param taskId 任务id
     * @return 通知日志
     */
    List<TaskNoticeVo> listNotices(String taskId);


    /**
     * 获取节点日志中任务处理的详细信息
     *
     * @param taskId 任务id
     * @return 信息
     */
    TaskLogVo showTaskProcessItem(String taskId);

    PageInfo<RuleActionAuditVo> listRuleActionAudit(RuleActionAuditQueryVo vo);


	/**
	 * Description: TODO
	 * @param processInstanceId
	 * @param branchCode
     * @return
	 * @return Object
	 * @throws
	 */
	List<TaskFormDetailVo> showFormsByInstanceId(String processInstanceId, String branchCode);

    /**
     * 流转记录
     *
     * @param httpFlowRecordsQueryDto
     * @return 流转列表
     */
    List<HttpFlowRecordsQueryVo> batchQueryFlowRecords(HttpFlowRecordsQueryDto httpFlowRecordsQueryDto);

    /**
     * 根据条件查询获取任务节点列表
     *
     * @return 任务节点列表
     */
    List<FlowNodeRecordsDTO> getTaskCodeList(HttpGetTaskDto httpGetTaskDto);

    /**
     * 查询指定当前在指定节点的流程集合
     *
     * @return 任务节点列表
     */
    List<FlowNodeRecordsDTO> getRunningProcessList(HttpGetTaskDto httpGetTaskDto);

    /**
     * 查询运行中流程变量
     * @param variableQueryVo
     * @return
     */
    List<VariableResult> queryRunningVariableList(VariableQueryVo variableQueryVo);

    /**
     * 查询历史流程变量
     * @param variableQueryVo
     * @return
     */
    List<VariableResult> queryHistoricVariableList(VariableQueryVo variableQueryVo);

    /**
     * 修改运行中变量
     * @param variableResult
     * @return
     */
    boolean updateRunningVariable(VariableResult variableResult) throws Exception;
}
